草庐IT

Java CMS GC 行为

全部标签

c++ - 奇怪的 cout 行为

我在Ubuntu上编译了一个为Windows开发(并在Windows上运行)的程序。在Ubuntu上,我看到这段代码:strings=values_[9];cout产生这个输出:highxigh第二行的预期输出是“highx”。我知道values_[9]的值最初是从一个文件(写在Windows上)中读取的。打印其他字符串似乎工作正常。这是怎么回事? 最佳答案 运行命令,其输出通过cat-A进行管道传输。可能s的值,或者endl产生的输出给你一个'\r'字符,它通常将光标发回到行首。编辑:进一步思考,杂散的'\r'几乎肯定在s中,而不

c++ - 这个指针上的 const_cast 是未定义的行为吗?

在另一个问题中,我遇到了这段代码:RealStatData::mean(Realtrim)const{//trim,punnotintendedconst_cast(*this).items.sort();//trim}cppreference在他们的page上也有一个例子:structtype{type():i(3){}voidm1(intv)const{//this->i=v;//compileerror:thisisapointertoconstconst_cast(this)->i=v;//OK}inti;};除了为什么这会实用这一显而易见的问题之外,它不安全吗?创建的对象是否

c++ - 在 C++ 中检查数字是否为奇数。代码的奇怪行为

我是一名计算机科学助教,我的一个学生提交了以下代码来检查整数是奇数还是偶数:intis_odd(inti){if((i%2==1)&&(i%2==-1));else;}令人惊讶的是(至少对我而言)这段代码给出了正确的结果。我测试了高达100000000的数字,老实说,我无法解释为什么这段代码会这样运行。我们正在使用gccv6.2.1和c++我知道这不是一个典型的问题,但我希望能找到一些帮助。 最佳答案 无论您的编译器实际发生了什么,在不返回任何内容的情况下从函数末尾流出是未定义的行为。请注意,如果您将-O3传递给GCC,或使用Cla

c++ - c++构造函数的奇怪行为

我正在测试这段代码,想知道为什么它在编译时没有失败?。我正在使用c++11和g++4.7.2。我的生产代码有类似的结构,它在运行时出错,然后我发现我正在用错误的参数类型构造类。#include#includetypedefstd::vectorWord;classData{public:constWord&word;Data(Wordw):word(w){}};classBase{constData&data;public:Base(constData&d):data(d){}~Base(){}};classWork:publicBase{public:Work(constData&d

c++ - 限制未定义行为引起的困惑?

根据我的阅读理解,未定义行为是在编译时为编译器留下几个不同的替代方案的结果。然而,这是否意味着如果遵循严格的编码实践(比如将每个赋值和每个相等放在一个单独的语句中,适当的调试和评论)那么它不应该在寻找未定义的来源方面造成重大问题-行为。此外,对于出现的每个错误,如果您识别代码,您应该知道可以使用哪些语句来代替该特定语句,对吗?编辑:我对您编写了您不想编写的代码的地方不感兴趣。我对按数学逻辑合理的代码无法运行的示例感兴趣。此外,我认为“良好的编码习惯”是每隔几行提供大量信息的注释、适当的缩进和定期调试转储。 最佳答案 未定义的行为不一

c++ - 这是未指定(未定义)的行为吗?

我读过这篇文章:Undefinedbehaviorandsequencepoints,但我不知道它是否是UB。考虑以下示例:#includeclassop{public:explicitop(intx){std::cout我期望这样的输出(或基于评估顺序的输出的某种排列):x:0x:1x:2res:3gcc-4.7.1和clang-3.0给了我这样的输出,但是当我用msvc-2010编译这个例子时我得到了输出:x:0x:0x:0res:3你能给我一些关于这种行为的信息吗? 最佳答案 a+b+c中参数求值的顺序是特定于编译器的。因此,

c++ - 为什么用 new 创建的 C++ 数组与 C 样式数组的行为不同?

我正在自学C++,因此一直在编写一些示例代码来真正巩固我对指针和数组的理解。我是这样写的:intmyints[]={20,40,60,80,100};//Cstylearray?shouldbestoredonstack?ismyint'stypepointertointoranarrayofint?howdoesitdifferfrommyotherints?int*myotherints=newint[5]{20,40,60,80,100};//newalwaysreturnspointer,isthisaC++stylearray?//doesthispointergetcrea

c++ - C++ 对象引用的行为

考虑以下代码段:classWindow//BaseclassforC++virtualfunctionexample{public:virtualvoidCreate()//virtualfunctionforC++virtualfunctionexample{coutaRef和bRef都分配了*button,但为什么这两个输出不同。赋值给引用类型和非引用类型有什么区别? 最佳答案 你遇到了切片问题。WindowbRef=*button;这里bRef不是引用而是对象。当您将派生类型分配给bRef时,您将派生部分切掉,只剩下一个从Co

c++ - C++11 中的 auto 关键字奇怪行为

只是理论问题-为什么我不能写这样的代码:autoautofoo=0;第一个auto关键字-存储类说明符(是的,我知道它在C++11中没有用且已弃用),第二个auto关键字-auto类型说明符。怎么了?再一次-我真的不想在实际代码中使用它。 最佳答案 auto存储类说明符并非“在C++11中无用且已弃用”,它已被完全删除。auto关键字不再是存储类说明符,不能用作一个说明符。在C++11中,auto是一个简单的类型说明符。 关于c++-C++11中的auto关键字奇怪行为,我们在Stack

c# - c# 和 c++ 中反向循环的奇怪行为

我只是像这样编写了一个简单的反向循环:for(unsignedinti=50;i>=0;i--)printf("i=%d\n",i);但它并没有像预期的那样停在0处,而是下降到负值,为什么?请参阅此ideone示例:http://ideone.com/kkixx8(我用c#和c++测试过) 最佳答案 您将int声明为无符号的。它将始终>=0。您看到负值的唯一原因是您的printf调用将其解释为有符号(%d)而不是无符号(%ud)。 关于c#-c#和c++中反向循环的奇怪行为,我们在Sta